package com.chapter7.neibulei.demo11;

/**
 * 回调实现机制就是定义一个接口，一个类的某个方法接受该接口类型的对象，当触发回调的事件发生时，调
 * 用这个接口中的方法来进行处理。
 */
public class EventSystem {
    MyButton myButton = new MyButton();


    //
    public EventSystem(){
        myButton.setName("bt1");
        myButton.RegisterListener(new ActionListener() {
            @Override
            public void doAction(Event e) {
                ClickEvent ce = (ClickEvent) e;
                String name = ((MyButton)ce.getSource()).getName();
                System.out.println(name+" clicked");
                System.out.println("event time:" + ce.getTime());
            }
        });
    }

    public void runn(){
        //当MyButton对象的click方法被调用时（按钮被点击），
        // MyButton类会new ClickEvent对象（产生一个点击事件），
        // 并把事件的发起者（EventSystem）和事件的发生时间保存在ClickEvent对象中，
        // 然后把这个ClickEvent事件对象传递给 已经注册（RegisterListener）到MyButton对象中的ActionListener对象（事件监听器）。
        // 注册到MyButton对象的ActionListener对象是一个匿名的内部类对象，它负责处理ClickEvent事件。
        myButton.click();
    }

    public static void main(String[] args) {
        EventSystem es = new EventSystem();
        es.runn();
    }

}
